package licode.unisop.platform.client.feign;


import licode.unisop.platform.client.info.PlatformAuthInfo;
import licode.unisop.platform.client.info.PlatformHeartInfo;
import licode.unisop.platform.client.vo.PlatAuthVO;
import licode.unisop.provider.info.SiPlatIdFind;
import licode.unisop.provider.info.SiPlatformId;
import licode.unisop.unilite.result.UniResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @author licode
 */
@FeignClient(name = "${uni-sop.platform.service:uni-platform-service}", url = "${uni-sop.platform.host:}")
public interface PlatformAuthApiFeign {
    /**
     * 更新平台缓存
     * @param platId 平台ID
     */
    @PostMapping("/plat-api/v1/internal/auth/cache/update")
    UniResult<String> updateCache(@RequestBody SiPlatformId platId);

    /**
     * 验证平台（各个平台登录时调用）
     * @param info 平台认证的信息
     * @return 返回临时生成的平台Token
     */
    @PostMapping("/plat-api/v1/internal/auth/register")
    UniResult<PlatAuthVO> register(@RequestBody PlatformAuthInfo info);

    /**
     * 通过平台标识查询平台信息
     * @param idInfo 平台标识
     * @return 平台信息
     */
    @PostMapping("/plat-api/v1/internal/auth/from-id")
    UniResult<PlatAuthVO> fromId(@RequestBody SiPlatIdFind idInfo);

    /**
     * 根据Token查询认证的平台
     *
     * @param platformToken 平台token
     * @return 平台信息
     */
    @PostMapping("/plat-api/v1/internal/auth/from-token")
    UniResult<PlatAuthVO> fromToken(@RequestBody String platformToken);

    /**
     * 获取当前已经认证的平台数
     * @return 认证的平台数
     */
    @PostMapping("/plat-api/v1/internal/auth/count")
    UniResult<Long> getAuthCount();

    /**
     * 对指定的平台进行禁用
     * @param idInfo 平台ID
     */
    @PostMapping("/plat-api/v1/internal/auth/forbid")
    UniResult<String> forbid(@RequestBody SiPlatformId idInfo);

    /**
     * 对认证的平台进行续期
     * @param info 平台信息
     * @return 成功返回OK
     */
    @PostMapping("/plat-api/v1/internal/auth/renew")
    UniResult<String> renew(@RequestBody PlatformHeartInfo info);
}
